home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Games / WHDLoad / Src / slave-examples / ik+.asm < prev    next >
Encoding:
Assembly Source File  |  2001-08-29  |  4.5 KB  |  196 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    ik+.asm
  3. ;  :Contents.    Slave for "IK+"
  4. ;  :Author.    Wepl
  5. ;  :Version.    $Id: ik+.asm 1.6 2001/08/29 16:12:44 wepl Exp wepl $
  6. ;  :History.    22.09.97 initial
  7. ;        01.10.97 debug key changed because F9 is used in game
  8. ;        24.11.98 adapted for v8 (obsoletes novbrmove)
  9. ;        13.07.01 supports another version
  10. ;        01.08.01 highscore saving added
  11. ;        29.08.01 some int stuff fixed, highscore saving fixed
  12. ;  :Requires.    -
  13. ;  :Copyright.    Public Domain
  14. ;  :Language.    68000 Assembler
  15. ;  :Translator.    Barfly V1.131
  16. ;  :To Do.
  17. ;---------------------------------------------------------------------------*
  18.  
  19.     INCDIR    Includes:
  20.     INCLUDE    whdload.i
  21.     INCLUDE    whdmacros.i
  22.  
  23.     IFD    BARFLY
  24.     OUTPUT    "wart:i/ik+/IK+.Slave"
  25.     BOPT    O+                ;enable optimizing
  26.     BOPT    OG+                ;enable optimizing
  27.     BOPT    ODd-                ;disable mul optimizing
  28.     BOPT    ODe-                ;disable mul optimizing
  29.     BOPT    w4-                ;disable 64k warnings
  30.     SUPER
  31.     ENDC
  32.  
  33. ;============================================================================
  34.  
  35. _base        SLAVE_HEADER            ;ws_Security + ws_ID
  36.         dc.w    13            ;ws_Version
  37.         dc.w    WHDLF_NoError|WHDLF_NoKbd    ;ws_flags
  38.         dc.l    $80000            ;ws_BaseMemSize
  39.         dc.l    0            ;ws_ExecInstall
  40.         dc.w    _start-_base        ;ws_GameLoader
  41.         dc.w    0            ;ws_CurrentDir
  42.         dc.w    0            ;ws_DontCache
  43. _keydebug    dc.b    0            ;ws_keydebug
  44. _keyexit    dc.b    $59            ;ws_keyexit = F10
  45. _expmem        dc.l    $1000            ;ws_ExpMem
  46.         dc.w    _name-_base        ;ws_name
  47.         dc.w    _copy-_base        ;ws_copy
  48.         dc.w    _info-_base        ;ws_info
  49.  
  50. ;============================================================================
  51.  
  52.     IFD BARFLY
  53.     DOSCMD    "WDate  >T:date"
  54.     ENDC
  55.  
  56. _name        dc.b    "IK+",0
  57. _copy        dc.b    "1987/8 Archer Maclean",0
  58. _info        dc.b    "installed and fixed by Wepl",10
  59.         dc.b    "Version 1.5 "
  60.     IFD BARFLY
  61.         INCBIN    "T:date"
  62.     ENDC
  63.         dc.b    0
  64. _file        dc.b    "IK+.Image",0
  65. _savename    dc.b    "IK+.Highs",0
  66.     EVEN
  67.  
  68. ;============================================================================
  69. _start    ;    A0 = resident loader
  70. ;============================================================================
  71.  
  72.         lea    (_resload,pc),a1
  73.         move.l    a0,(a1)
  74.         move.l    a0,a2
  75.  
  76.     IFEQ 1
  77.         moveq    #0,d0            ;offset
  78.         move.l    #$400,d1        ;size
  79.         lea    $1000,a0        ;destination
  80.         sub.l    a1,a1            ;tags
  81.         jsr    (resload_DiskLoadDev,a2)
  82.         skip    6*2,$100c+$1a
  83.         clr.w    $500            ;stackframe format error
  84.         jmp    $100c
  85.     ENDC
  86.  
  87.         lea    (_file),a0
  88.         lea    $600,a1
  89.         jsr    (resload_LoadFileDecrunch,a2)
  90.         lea    $600,a0
  91.         jsr    (resload_CRC16,a2)
  92.         cmp.w    #$8570,d0        ;Original
  93.         beq    .ok
  94.         cmp.w    #$bfb0,d0        ;CDTV/HitSquad
  95.         beq    .ok
  96.         pea    TDREASON_WRONGVER
  97.         jmp    (resload_Abort,a2)
  98. .ok
  99.         lea    (_pl),a0
  100.         sub.l    a1,a1
  101.         jsr    (resload_Patch,a2)
  102.  
  103.         lea    (_ciaa),a1
  104.         tst.b    (ciaicr,a1)                ;clear requests
  105.         move.b    #CIAICRF_SETCLR|CIAICRF_SP,(ciaicr,a1)    ;allow ints
  106.         and.b    #~(CIACRAF_SPMODE),(ciacra,a1)        ;input mode
  107.  
  108.         jmp    $600
  109.  
  110. _pl    PL_START
  111.     PL_R    $2475c            ;copylock
  112. ;    PL_W    $500,0            ;stackframe format error
  113.     PL_P    $1098,_strt
  114.     PL_R    $1976            ;preserve NMI
  115.     PL_P    $1aaa,_keyb
  116.     PL_PS    $12bc+$600,_loadhighs
  117.     PL_PS    $9cde+$600,_savehighs
  118.     PL_S    $11a0+$600,$ba-$a0    ;trap stuff
  119.     PL_S    $c30+$600,4        ;move #,sr
  120.     PL_S    $99a+$600,4        ;move #,sr
  121.     PL_END
  122.  
  123. _strt        move    #$2000,sr
  124.         jmp    $ad4
  125.  
  126. _loadhighs    lea    _savename,a0
  127.         move.l    _resload,a2
  128.         jsr    (resload_GetFileSize,a2)
  129.         tst.l    d0
  130.         beq    .end
  131.         lea    _savename,a0
  132.         move.l    _expmem,a1
  133.         jsr    (resload_LoadFile,a2)
  134.         bsr    _swaphighs
  135.         move.b    #1,$610        ;original
  136. .end        rts
  137.  
  138. _savehighs    bsr    _swaphighs
  139.         move.l    #6*51,d0
  140.         lea    _savename,a0
  141.         move.l    (_expmem),a1
  142.         move.l    _resload,a2
  143.         jsr    (resload_SaveFile,a2)
  144.         bsr    _swaphighs
  145.         moveq    #0,d0
  146.         moveq    #0,d1
  147.         moveq    #0,d2
  148.         rts
  149.  
  150. _swaphighs    move.l    (_expmem),a0
  151.         lea    $a27,a1        ;name x..
  152.         bsr    .swap
  153.         lea    $a5a,a1        ;name .x.
  154.         bsr    .swap
  155.         lea    $a8d,a1        ;name ..x
  156.         bsr    .swap
  157.         lea    $98e,a1        ;score xx..00
  158.         bsr    .swap
  159.         lea    $9c1,a1        ;score ..xx00
  160.         bsr    .swap
  161.         lea    $9f4,a1        ;belt
  162. .swap        moveq    #51-1,d0
  163. .loop        move.b    (a0),d1
  164.         move.b    (a1),(a0)+
  165.         move.b    d1,(a1)+
  166.         dbf    d0,.loop
  167.         rts
  168.  
  169. _keyb        cmp.b    (_keyexit),d0
  170.         beq    _exit
  171.         jsr    $1b5e            ;original
  172.         moveq    #3-1,d1            ;wait because handshake min 75 µs
  173. .int2_w1    move.b    (_custom+vhposr),d0
  174. .int2_w2    cmp.b    (_custom+vhposr),d0    ;one line is 63.5 µs
  175.         beq    .int2_w2
  176.         dbf    d1,.int2_w1        ;(min=127µs max=190.5µs)
  177.         jmp    $1ace
  178.  
  179. ;--------------------------------
  180.  
  181. _exit        move    #$2700,sr        ;otherwise freeze inside whdload
  182.         lea    ($80000),a7        ;otherwise "bad stackpointer" on exit
  183.         pea    TDREASON_OK.w
  184.         move.l    (_resload),-(a7)
  185.         add.l    #resload_Abort,(a7)
  186.         rts
  187.  
  188. ;--------------------------------
  189.  
  190. _resload    dc.l    0            ;address of resident loader
  191.  
  192. ;======================================================================
  193.  
  194.     END
  195.  
  196.